﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Ruandao.MiniFace
{
    public class RepeaterWidget : RepeaterWidgetBase
    {
        /// <summary>
        /// 指定数据源对象，当存在该设置项时，直接微件所处的环境上下文中获取需要列表显示的内容，
        /// 不再使用微件中的搜索条件来检索数据。
        /// DataSource是可以通过Python求值的表达式，如"ViewBag.ContentList，ViewBag.Catalog.ContentList"等等。
        /// 项模板占位符：{?ItemTemplate?}
        /// 子模板定义标记包括空模板、分隔模板和四个项模板，分三个级别一共18个模板标记。
        /// RootItem/Item/ChildItem, RootSource/ItemSource/ChildSource
        /// </summary>
        /// 
        public RepeaterWidget()
        {
        }

        protected override dynamic SearchData(TemplateContext templateContext)
        {
            if (!Properties.ContainsKey("RootSource"))
            {
                throw new Exception("RepeaterWidget必须包含RootSource参数，用来指定要显示的列表数据源。");
            }
            return PythonEngine.GetEngine().Execute(this.RootSource, templateContext.PythonScope);
        }

        protected override System.Dynamic.ExpandoObject GetWidgetArgs()
        {
            dynamic widgetArgs = base.GetWidgetArgs();
            widgetArgs.RootSource = this.RootSource;
            return widgetArgs;
        }

        protected override void InitProperties(TemplateContext templateContext)
        {
            base.InitProperties(templateContext);
            if (Properties.ContainsKey("RootSource")) this.RootSource = Properties["RootSource"];
        }
    }
}
